﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>光驱托盘 - 语法 &amp; 使用 | AutoHotkey v2</title>
<meta name="description" content="The 光驱托盘 function ejects or retracts the tray of the specified CD/DVD drive." />
<meta name="ahk:equiv-v1" content="commands/Drive.htm#Eject" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>光驱托盘</h1>

<p>弹出或收回指定 CD/DVD 驱动器的托盘.</p>

<pre class="Syntax"><span class="func">光驱托盘</span> <span class="optional">Drive, Retract := false</span></pre>

<h2 id="Parameters">参数</h2>
<dl>
    <dt>Drive</dt>
  
    <dd>
        <p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
        <p>驱动器字母后面跟着冒号和可选的反斜杠(也可以用于 UNC 路径和映射驱动器). 如果省略, 将使用默认的 CD/DVD 驱动器.</p>
    </dd>
    <dt>Retract</dt>
    <dd>
        <p>类型: <a href="../Concepts.htm#boolean">整数(布尔值)</a></p>
        <p>指定 1(true) 收回/关闭托盘. 指定 0(false) 或省略此参数以弹出/打开托盘.</p>
    </dd>
</dl>

<h2 id="Error_Handling">错误处理</h2>
<p>如果检测到失败, 则抛出异常.</p>

<h2 id="Remarks">备注</h2>
<p>在允许脚本继续之前, 函数会等待弹出或收回完成.</p>
<p>函数可能无法在网络驱动器或非-CD/DVD 驱动器上工作. 如果在这种情况下失败, 或者由于其他原因失败, 抛出异常. 要弹出其他类型的媒体或设备, 请参阅页面底部的 <a href="#ExDllCall">动态库调用 示例</a>.</p>
<p>可以通过测量函数完成所需的时间来判断以前的托盘状态. 例如, 下面的热键将托盘切换到相反的状态(打开或关闭):</p>
<pre>#c::
{
    光驱托盘()
    <em>; 如果函数快速完成, 则托盘已经处于弹出状态.
    ; 在那样的情况下, 收回托盘::</em>
    如果 (内_距离上次此热键触发时间 &lt; 1000)  <em>; 需要时调整这个时间值.</em>
        光驱托盘(, true)
}</pre>

<h2 id="Related">相关</h2>
<p><a href="DriveGetStatusCD.htm">获取光盘状态</a>, <a href="Drive.htm">驱动器函数</a></p>

<h2 id="Examples">示例</h2>

<div class="ex" id="ExBasic">
<p><a href="#ExBasic">#1</a>: 收回(关闭) 默认的 CD/DVD 驱动器:</p>
<pre>光驱托盘(, true)</pre>
</div>

<div class="ex" id="ExDllCall">
<p><a href="#ExDllCall">#2</a>: 这是另一种弹出方法, 也适用于 CD/DVD 以外的媒体/设备类型. 更新下面的第一行以匹配所需的驱动器字母(您可以忽略下面的所有其他行):</p>
<pre class="NoIndent">DriveLetter := "I:"  <em>; 设置为您想弹出的驱动器字母.</em>

hVolume := 动态库调用("CreateFile"
    , &quot;Str&quot;, "\\.\" . DriveLetter
    , &quot;UInt&quot;, 0x80000000 | 0x40000000  <em>; GENERIC_READ | GENERIC_WRITE</em>
    , &quot;UInt&quot;, 0x1 | 0x2  <em>; FILE_SHARE_READ | FILE_SHARE_WRITE</em>
    , &quot;UInt&quot;, 0
    , &quot;UInt&quot;, 0x3  <em>; OPEN_EXISTING</em>
    , &quot;UInt&quot;, 0, &quot;UInt&quot;, 0)
如果 (hVolume != -1)
{
    动态库调用("DeviceIoControl"
        , &quot;UInt&quot;, hVolume
        , &quot;UInt&quot;, 0x2D4808   <em>; IOCTL_STORAGE_EJECT_MEDIA</em>
        , &quot;UInt&quot;, 0, &quot;UInt&quot;, 0, &quot;UInt&quot;, 0, &quot;UInt&quot;, 0
        , &quot;UIntP&quot;, dwBytesReturned := 0  <em>; Unused.</em>
        , &quot;UInt&quot;, 0)
    动态库调用("CloseHandle", &quot;UInt&quot;, hVolume)
}</pre>
</div>

</body>
</html>